当前位置:  开发笔记 > 编程语言 > 正文

在没有`attr_accessor`的情况下为rails模型设置非数据库属性

如何解决《在没有`attr_accessor`的情况下为rails模型设置非数据库属性》经验,为你挑选了2个好方法。

在PHP中,我可以在模型中设置属性(不是数据库中的列).例如(PHP代码),

$user = new User;
$user->flag = true;

但是在rails中,当我设置数据库中不存在的任何属性时,它将抛出错误undefined method flag.有attr_accessor方法,但如果我需要大约10个临时属性会发生什么?



1> Richard Peck..:

但如果我需要大约十个临时属性会发生什么?

#app/models/user.rb
class User < ActiveRecord::Base
   attr_accessor :flag, :other_attribute, :other_attribute2, :etc...
end

attr_accessor在Rails中创建"虚拟"属性 - 它们不存在于数据库中,但存在于模型中.

与db中的属性一样,attr_accessor只需在类中创建一组setter&getter(实例)方法,您可以在初始化类时调用和交互:

#app/models/user.rb
class User < ActiveRecord::Base
   attr_accessor :flag

   # getter
   def flag
     @flag
   end

   # setter
   def flag=(val)
     @flag = val
   end
end



2> Simone Carle..:

这是可以预期的,因为这是ActiveRecord的设计原理。如果需要设置任意属性,则必须使用另一种对象。

例如,Ruby提供了一个名为的库OpenStruct,该库允许您创建对象,您可以在其中分配任意键/值。您可能希望使用此类库,然后仅在/需要将其保存到数据库时才将对象转换为相应的ActiveRecord实例。

不要尝试ActiveRecord按照您刚才描述的那样进行建模,因为它根本不是设计成以这种方式进行行为。根据您当前的PHP知识,这将是一种货物培养错误。

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有